<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=iso-8859-1">
<title>What Is a Message-Driven Bean? - The Java EE 5 Tutorial</title>
<meta name="robots" content="index,follow">
<meta name="robots" content="index,follow">
<meta name="date" content="2008-10-01">
<link rel="stylesheet" type="text/css" href="css/default.css">
<link rel="stylesheet" type="text/css" href="css/ipg.css">
<link rel="stylesheet" type="text/css" href="css/j5eetutorial.css">
</head>

<body>

<table border="0" cellpadding="5" cellspacing="0" width="100%">
<tbody>
   <tr valign="top">
      <td><p class="toc level1"><a href="docinfo.html">Document Information</a></p>
<p class="toc level1 tocsp"><a href="gexaf.html">Preface</a></p>
<p class="toc level1 tocsp"><a href="gfirp.html">Part&nbsp;I&nbsp;Introduction</a></p>
<p class="toc level2"><a href="bnaaw.html">1.&nbsp;&nbsp;Overview</a></p>
<p class="toc level2"><a href="gfiud.html">2.&nbsp;&nbsp;Using the Tutorial Examples</a></p>
<p class="toc level1 tocsp"><a href="bnadp.html">Part&nbsp;II&nbsp;The Web Tier</a></p>
<p class="toc level2"><a href="bnadr.html">3.&nbsp;&nbsp;Getting Started with Web Applications</a></p>
<p class="toc level2"><a href="bnafd.html">4.&nbsp;&nbsp;Java Servlet Technology</a></p>
<p class="toc level2"><a href="bnagx.html">5.&nbsp;&nbsp;JavaServer Pages Technology</a></p>
<p class="toc level2"><a href="bnajo.html">6.&nbsp;&nbsp;JavaServer Pages Documents</a></p>
<p class="toc level2"><a href="bnakc.html">7.&nbsp;&nbsp;JavaServer Pages Standard Tag Library</a></p>
<p class="toc level2"><a href="bnalj.html">8.&nbsp;&nbsp;Custom Tags in JSP Pages</a></p>
<p class="toc level2"><a href="bnaon.html">9.&nbsp;&nbsp;Scripting in JSP Pages</a></p>
<p class="toc level2"><a href="bnaph.html">10.&nbsp;&nbsp;JavaServer Faces Technology</a></p>
<p class="toc level2"><a href="bnaqz.html">11.&nbsp;&nbsp;Using JavaServer Faces Technology in JSP Pages</a></p>
<p class="toc level2"><a href="bnatx.html">12.&nbsp;&nbsp;Developing with JavaServer Faces Technology</a></p>
<p class="toc level2"><a href="bnavg.html">13.&nbsp;&nbsp;Creating Custom UI Components</a></p>
<p class="toc level2"><a href="bnawo.html">14.&nbsp;&nbsp;Configuring JavaServer Faces Applications</a></p>
<p class="toc level2"><a href="bnaxu.html">15.&nbsp;&nbsp;Internationalizing and Localizing Web Applications</a></p>
<p class="toc level1 tocsp"><a href="bnayk.html">Part&nbsp;III&nbsp;Web Services</a></p>
<p class="toc level2"><a href="bnayl.html">16.&nbsp;&nbsp;Building Web Services with JAX-WS</a></p>
<p class="toc level2"><a href="bnazf.html">17.&nbsp;&nbsp;Binding between XML Schema and Java Classes</a></p>
<p class="toc level2"><a href="bnbdv.html">18.&nbsp;&nbsp;Streaming API for XML</a></p>
<p class="toc level2"><a href="bnbhf.html">19.&nbsp;&nbsp;SOAP with Attachments API for Java</a></p>
<p class="toc level1 tocsp"><a href="bnblr.html">Part&nbsp;IV&nbsp;Enterprise Beans</a></p>
<p class="toc level2"><a href="bnbls.html">20.&nbsp;&nbsp;Enterprise Beans</a></p>
<p class="toc level3"><a href="bnblt.html">What Is an Enterprise Bean?</a></p>
<p class="toc level4"><a href="bnblt.html#bnblu">Benefits of Enterprise Beans</a></p>
<p class="toc level4"><a href="bnblt.html#bnblv">When to Use Enterprise Beans</a></p>
<p class="toc level4"><a href="bnblt.html#bnblw">Types of Enterprise Beans</a></p>
<p class="toc level3 tocsp"><a href="bnbly.html">What Is a Session Bean?</a></p>
<p class="toc level4"><a href="bnbly.html#bnblz">State Management Modes</a></p>
<p class="toc level5"><a href="bnbly.html#bnbma">Stateful Session Beans</a></p>
<p class="toc level5"><a href="bnbly.html#bnbmb">Stateless Session Beans</a></p>
<p class="toc level4 tocsp"><a href="bnbly.html#bnbmc">When to Use Session Beans</a></p>
<div class="onpage">
<p class="toc level3 tocsp"><a href="">What Is a Message-Driven Bean?</a></p>
<p class="toc level4"><a href="#bnbme">What Makes Message-Driven Beans Different from Session Beans?</a></p>
<p class="toc level4"><a href="#bnbmf">When to Use Message-Driven Beans</a></p>
</div>
<p class="toc level3 tocsp"><a href="bnbmg.html">Defining Client Access with Interfaces</a></p>
<p class="toc level4"><a href="bnbmg.html#bnbmh">Remote Clients</a></p>
<p class="toc level4"><a href="bnbmg.html#bnbmj">Local Clients</a></p>
<p class="toc level4"><a href="bnbmg.html#bnbmk">Deciding on Remote or Local Access</a></p>
<p class="toc level4"><a href="bnbmg.html#bnbml">Web Service Clients</a></p>
<p class="toc level4"><a href="bnbmg.html#bnbmm">Method Parameters and Access</a></p>
<p class="toc level5"><a href="bnbmg.html#bnbmn">Isolation</a></p>
<p class="toc level5"><a href="bnbmg.html#bnbmo">Granularity of Accessed Data</a></p>
<p class="toc level3 tocsp"><a href="bnbmp.html">The Contents of an Enterprise Bean</a></p>
<p class="toc level3"><a href="bnbmr.html">Naming Conventions for Enterprise Beans</a></p>
<p class="toc level3"><a href="bnbmt.html">The Life Cycles of Enterprise Beans</a></p>
<p class="toc level4"><a href="bnbmt.html#bnbmu">The Life Cycle of a Stateful Session Bean</a></p>
<p class="toc level4"><a href="bnbmt.html#bnbmw">The Life Cycle of a Stateless Session Bean</a></p>
<p class="toc level4"><a href="bnbmt.html#bnbmy">The Life Cycle of a Message-Driven Bean</a></p>
<p class="toc level3 tocsp"><a href="bnbna.html">Further Information about Enterprise Beans</a></p>
<p class="toc level2 tocsp"><a href="bnbnb.html">21.&nbsp;&nbsp;Getting Started with Enterprise Beans</a></p>
<p class="toc level2"><a href="bnboc.html">22.&nbsp;&nbsp;Session Bean Examples</a></p>
<p class="toc level2"><a href="bnbpk.html">23.&nbsp;&nbsp;A Message-Driven Bean Example</a></p>
<p class="toc level1 tocsp"><a href="bnbpy.html">Part&nbsp;V&nbsp;Persistence</a></p>
<p class="toc level2"><a href="bnbpz.html">24.&nbsp;&nbsp;Introduction to the Java Persistence API</a></p>
<p class="toc level2"><a href="bnbrl.html">25.&nbsp;&nbsp;Persistence in the Web Tier</a></p>
<p class="toc level2"><a href="bnbrs.html">26.&nbsp;&nbsp;Persistence in the EJB Tier</a></p>
<p class="toc level2"><a href="bnbtg.html">27.&nbsp;&nbsp;The Java Persistence Query Language</a></p>
<p class="toc level1 tocsp"><a href="bnbwi.html">Part&nbsp;VI&nbsp;Services</a></p>
<p class="toc level2"><a href="bnbwj.html">28.&nbsp;&nbsp;Introduction to Security in the Java EE Platform</a></p>
<p class="toc level2"><a href="bnbyk.html">29.&nbsp;&nbsp;Securing Java EE Applications</a></p>
<p class="toc level2"><a href="bncas.html">30.&nbsp;&nbsp;Securing Web Applications</a></p>
<p class="toc level2"><a href="bncdq.html">31.&nbsp;&nbsp;The Java Message Service API</a></p>
<p class="toc level2"><a href="bncgv.html">32.&nbsp;&nbsp;Java EE Examples Using the JMS API</a></p>
<p class="toc level2"><a href="bncih.html">33.&nbsp;&nbsp;Transactions</a></p>
<p class="toc level2"><a href="bncjh.html">34.&nbsp;&nbsp;Resource Connections</a></p>
<p class="toc level2"><a href="bncjx.html">35.&nbsp;&nbsp;Connector Architecture</a></p>
<p class="toc level1 tocsp"><a href="bnckn.html">Part&nbsp;VII&nbsp;Case Studies</a></p>
<p class="toc level2"><a href="bncko.html">36.&nbsp;&nbsp;The Coffee Break Application</a></p>
<p class="toc level2"><a href="bnclz.html">37.&nbsp;&nbsp;The Duke's Bank Application</a></p>
<p class="toc level1 tocsp"><a href="gexbq.html">Part&nbsp;VIII&nbsp;Appendixes</a></p>
<p class="toc level2"><a href="bncno.html">A.&nbsp;&nbsp;Java Encoding Schemes</a></p>
<p class="toc level2"><a href="bncnq.html">B.&nbsp;&nbsp;Preparation for Java EE Certification Exams</a></p>
<p class="toc level2"><a href="bncnt.html">C.&nbsp;&nbsp;About the Authors</a></p>
<p class="toc level1 tocsp"><a href="idx-1.html">Index</a></p>
</td>
      <td width="10px">&nbsp;</td>
      <td width="705px">
         <div class="header">
             <div class="header-links-top">
                 <a href="http://java.sun.com">java.sun.com</a> |
                 <a href="http://docs.sun.com/">docs.sun.com</a><br>
             </div> 
             <img src="graphics/tutorialBanner.gif" width="704" height="120" alt="The Java&trade; EE 5 Tutorial"/>
             <div class="header-links">
	         <a href="index.html">Home</a> |
                 <a href="http://java.sun.com/javaee/5/docs/tutorial/information/download.html">Download</a> |
                 <a href="http://java.sun.com/javaee/5/docs/tutorial/doc/JavaEETutorial.pdf">PDF</a> |
                 <a href="http://java.sun.com/javaee/5/docs/api/index.html">API</a> |
                 <a href="http://java.sun.com/javaee/5/docs/tutorial/information/faq.html">FAQ</a> |
                 <a href="http://java.sun.com/javaee/5/docs/tutorial/information/search.html">Search</a> |
                 <a href="http://java.sun.com/javaee/5/docs/tutorial/information/sendusmail.html">Feedback</a> |
                 <a href="http://java.sun.com/javaee/5/docs/tutorial/information/history.html">History</a>
             </div>
             <div class="navigation">
                 <a href="bnbly.html"><img style="padding-right: 3px" src="graphics/leftButton.gif" border="0"></a>
                 <a href="sjsaseej2eet.html"><img style="padding-right: 3px" src="graphics/upButton.gif" border="0"></a>
                 <a href="bnbmg.html"><img style="padding-left: 3px" src="graphics/rightButton.gif" border="0"></a>
             </div>
         </div>

	 <div class="maincontent">      	 
             

<a name="bnbmd"></a><h3>What Is a Message-Driven Bean?</h3>
<a name="indexterm-2024"></a><a name="indexterm-2025"></a><p><a name="indexterm-2026"></a><a name="indexterm-2027"></a><a name="indexterm-2028"></a>A <b>message-driven bean</b> is an enterprise bean that allows Java EE applications to process
messages asynchronously. It normally acts as a JMS message listener, which is similar
to an event listener except that it receives JMS messages instead of events.
The messages can be sent by any Java EE component (an application client,
another enterprise bean, or a web component) or by a JMS application or
system that does not use Java EE technology. Message-driven beans can process JMS
messages or other kinds of messages.</p><p>For a simple code sample, see <a href="bnbpk.html">Chapter&nbsp;23, A Message-Driven Bean Example</a>. For more information about using
message-driven beans, see <a href="bncgl.html">Using the JMS API in a Java EE Application</a> and <a href="bncgv.html">Chapter&nbsp;32, Java EE Examples Using the JMS API</a>.</p>

<a name="bnbme"></a><h4>What Makes Message-Driven Beans Different from Session Beans?</h4>
<p><a name="indexterm-2029"></a>The most visible difference between message-driven beans and session beans is that clients
do not access message-driven beans through interfaces. Interfaces are described in the section
<a href="bnbmg.html">Defining Client Access with Interfaces</a>. Unlike a session bean, a message-driven bean has only a bean class.</p><p>In several respects, a message-driven bean resembles a stateless session bean.</p>
<ul><li><p>A message-driven bean&rsquo;s instances retain no data or conversational state for a specific client.</p></li>
<li><p>All instances of a message-driven bean are equivalent, allowing the EJB container to assign a message to any message-driven bean instance. The container can pool these instances to allow streams of messages to be processed concurrently.</p></li>
<li><p>A single message-driven bean can process messages from multiple clients.</p></li></ul>
<p><a name="indexterm-2030"></a>The instance variables of the message-driven bean instance can contain some state across
the handling of client messages (for example, a JMS API connection, an open
database connection, or an object reference to an enterprise bean object).</p><p>Client components do not locate message-driven beans and invoke methods directly on them.
Instead, a client accesses a message-driven bean through, for example, JMS by sending
messages to the message destination for which the message-driven bean class is the
<tt>MessageListener</tt>. You assign a message-driven bean&rsquo;s destination during deployment by using Application Server
resources.</p><p>Message-driven beans have the following characteristics:</p>
<ul><li><p>They execute upon receipt of a single client message.</p></li>
<li><p>They are invoked asynchronously.</p></li>
<li><p>They are relatively short-lived.</p></li>
<li><p>They do not represent directly shared data in the database, but they can access and update this data.</p></li>
<li><p>They can be transaction-aware.</p></li>
<li><p>They are stateless.</p></li></ul>
<p><a name="indexterm-2031"></a><a name="indexterm-2032"></a>When a message arrives, the container calls the message-driven bean&rsquo;s <tt>onMessage</tt> method to
process the message. The <tt>onMessage</tt> method normally casts the message to one
of the five JMS message types and handles it in accordance with the
application&rsquo;s business logic. The <tt>onMessage</tt> method can call helper methods, or it can invoke
a session bean to process the information in the message or to store
it in a database.</p><p><a name="indexterm-2033"></a>A message can be delivered to a message-driven bean within a transaction context,
so all operations within the <tt>onMessage</tt> method are part of a single
transaction. If message processing is rolled back, the message will be redelivered. For
more information, see <a href="bnbpk.html">Chapter&nbsp;23, A Message-Driven Bean Example</a> and <a href="bncih.html">Chapter&nbsp;33, Transactions</a>.</p>

<a name="bnbmf"></a><h4>When to Use Message-Driven Beans</h4>
<p>Session beans allow you to send JMS messages and to receive them
synchronously, but not asynchronously. To avoid tying up server resources, do not to
use blocking synchronous receives in a server-side component, and in general JMS messages should
not be sent or received synchronously. To receive messages asynchronously, use a message-driven
bean.</p>
         </div>
         <div class="navigation">
             <a href="bnbly.html"><img style="padding-right: 3px" src="graphics/leftButton.gif" border="0"></a>
             <a href="sjsaseej2eet.html"><img style="padding-right: 3px" src="graphics/upButton.gif" border="0"></a>
             <a href="bnbmg.html"><img style="padding-left: 3px" src="graphics/rightButton.gif" border="0"></a>
         </div>

         <div class="copyright">
      	    <p>The material in The Java&trade; EE 5 Tutorial is <a href='docinfo.html'>copyright</a>-protected and may not be published in other works without express written permission from Sun Microsystems.</p>
      	 </div>

      </td>
   </tr>
</tbody>
</table>
</body>
</html>

